iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
影片教學

30天讓你從【零基礎】掌握智能合約 Solidity 入門走到飛系列 第 19

Solidity 入門走到飛🚀-【Day19】接收ETH - receive、fallback

  • 分享至 

  • xImage
  •  

影片教學

Yes

主要內容

使用 receive 和 fallback 這兩個特殊的回調函數來處理接收以太幣和處理不存在的函數調用,主要用於以下兩種情況。

1.接收以太幣

當其他用戶向你的合約發送以太幣時,receive 函數會被調用。

2.處理不存在的函數調用

當用戶調用了合約中不存在的函數時,fallback 函數會被觸發。

receive

receive 用於處理接收以太幣,一個合約最多只能有一個 receive,聲明方式與一般函數不同,不需要 function 關鍵字。

receive 不能帶有任何參數,不能返回任何值,必須同時包含 external 和 payable 關鍵字。

當合約接收以太幣時,receive 函數會被觸發。通常情況下,你應該在 receive 函數中執行簡單的操作,因為如果用戶使用 send 或 transfer 方法發送以太幣,gas 限制為 2300,複雜的邏輯可能導致 "Out of Gas" 錯誤。如果你需要更複雜的邏輯,可以使用 call 方法並自定義 gas。

fallback

fallback 函數用於處理不存在的函數調用,或者在代理合約中使用。fallback 函數會在調用合約中不存在的函數時被觸發。通常情況下,你應該將 fallback 函數聲明為 external 和 payable,以便能夠接收以太幣。

需要注意的是,receive 和 fallback 的區別在於觸發條件。當合約接收以太幣時,如果 msg.data 為空且存在 receive 函數,將觸發 receive;如果 msg.data 不為空或不存在 receive 函數,將觸發 fallback 函數。如果這兩個函數都不存在,直接向合約發送以太幣將導致錯誤(你仍然可以使用帶有 payable 標記的函數向合約發送以太幣)。

相關連結

WTF Solidity Fallback


上一篇
Solidity 入門走到飛🚀-【Day18】import - 導入
下一篇
Solidity 入門走到飛🚀-【Day20】發送ETH - transfer、send、call
系列文
30天讓你從【零基礎】掌握智能合約 Solidity 入門走到飛30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言